#pragma once

#include <string>
#include <vector>
#include <iostream>
#include <QtWidgets/QApplication>
#include <Inventor/Qt/SoQt.h>
#include <Inventor/Qt/viewers/SoQtExaminerViewer.h>
#include <Inventor/Qt/SoQtRenderArea.h>
#include <Inventor/nodes/SoComplexity.h>
#include <Inventor/nodes/SoCoordinate3.h>
#include <Inventor/nodes/SoNurbsSurface.h>
#include <Inventor/engines/SoElapsedTime.h>
#include <Inventor/nodes/SoSeparator.h>
#include <Inventor/nodes/SoMaterial.h>
#include <Inventor/nodes/SoPerspectiveCamera.h>
#include <Inventor/nodes/SoDirectionalLight.h>
#include <Inventor/nodes/SoPointLight.h>
#include <Inventor/nodes/SoOrthographicCamera.h>
#include <Inventor/nodes/SoRotationXYZ.h>
#include <Inventor/nodes/SoTransformSeparator.h>
#include <Inventor/nodes/SoShuttle.h>
#include <Inventor/nodes/SoBlinker.h>
#include <Inventor/nodes/SoCube.h>
#include <Inventor/nodes/SoCone.h>
#include <Inventor/nodes/SoSphere.h>
#include <Inventor/nodes/SoCylinder.h>
#include <Inventor/nodes/SoTexture2.h>
#include <Inventor/manips/SoTrackballManip.h>
#include <VolumeViz/nodes/SoTransferFunction.h>
#include <VolumeViz/nodes/SoVolumeData.h>
#include <VolumeViz/nodes/SoVolumeRender.h>
#include <VolumeViz/nodes/SoVolumeRendering.h>


using namespace std;

class Coin3dLearn
{
public:
	void test0(QWidget* myWindow);
	void test1(QWidget* myWindow);
	void test2(QWidget* myWindow);
	void test3(QWidget* myWindow);
	void test4(QWidget* myWindow);
	void test5(QWidget* myWindow);
	int test6(QWidget* myWindow, string ivFile);
	void test7(QWidget* myWindow);
	void test8(QWidget* myWindow);
	SoSeparator* makeSurface();
	void test9_BezSurf(QWidget* myWindow);

private:
	uint8_t* generate8bitVoxelSet(SbVec3s& dim);
};

